﻿// File: PrueabaDAOHistoriaClinica.cs Company: La Cruz 
// Copyright (c) 01-08-2013 All Right Reserved
// author: Enrique La Cruz
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Uricao.AccesoDeDatos.DAOS;
using Uricao.Entidades.EEntidad;
using Uricao.Entidades.FabricasEntidad;
using Uricao.Entidades.EHistoriaPaciente;
using Uricao.Entidades.ERolesUsuarios;
using Uricao.Entidades.ETratamientos;
using Uricao.AccesoDeDatos.IDAOS;
using Uricao.AccesoDeDatos.FabricaDAOS;

namespace Uricao.PruebasUnitarias.PHistoriaClinica
{
    [TestFixture]
    public class PruebaDAOHistoriaClinica
    {
        /*Consulta/Busqueda*/
        [Test]
        public void PruebaConstructor()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            Assert.IsNotNull(_daoHistoriaClinica);
            Assert.IsNotNull((_daoHistoriaClinica as DAOHistoriaClinica));
            Assert.IsTrue(_daoHistoriaClinica.Equals((_daoHistoriaClinica as DAOHistoriaClinica)));
        }


        [Test]
        public void PruebaConsultarTodasHistoriaClinica()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            List<Entidad> _historias = new List<Entidad>();
            _historias = _daoHistoriaClinica.ConsultarTodasHistoriaClinica();

            Assert.IsNotNull(_historias);
            Assert.IsTrue(_historias.Count > 0);
            CollectionAssert.AreEqual(_historias, _daoHistoriaClinica.ConsultarTodasHistoriaClinica());

            foreach(Entidad _historia in _historias)
            {
                System.Console.WriteLine((_historia as HistoriaClinica).NumeroHistoria);
                System.Console.WriteLine((_historia as HistoriaClinica).FechaIngreso);
                System.Console.WriteLine((_historia as HistoriaClinica).Observacion);
                System.Console.WriteLine((_historia as HistoriaClinica).Estado);
            }

        }

        [Test]
        public void PruebaConsultarHistoriaClinica()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            List<Entidad> _historias = new List<Entidad>();
            String _nombre = "Carlos";
            String _apellido = "Cedeno";
            String _cedula = "";
            int _fkIdHistoria = 0;
            int _esperadoIdHistoria = 1;

            _historias = _daoHistoriaClinica.ConsultarHistoriaClinica(_nombre,_apellido,_cedula,_fkIdHistoria);

            Assert.IsNotNull(_historias);
            Assert.IsTrue(_historias.Count > 0);
            CollectionAssert.AreEqual(_historias, _daoHistoriaClinica.ConsultarHistoriaClinica(_nombre, _apellido, _cedula, _fkIdHistoria));         
            Assert.AreEqual(_esperadoIdHistoria, (_historias[0] as HistoriaClinica).NumeroHistoria);

            foreach (Entidad _historia in _historias)
            {
                System.Console.WriteLine((_historia as HistoriaClinica).NumeroHistoria);
                System.Console.WriteLine((_historia as HistoriaClinica).FechaIngreso);
                System.Console.WriteLine((_historia as HistoriaClinica).Observacion);
                System.Console.WriteLine((_historia as HistoriaClinica).Estado);
            }

        }

        [Test]
        public void PruebaConsultarAntecedente()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            List<Entidad> _antecedente = new List<Entidad>();
            int _fkIdHistoria = 1;
            int _idAntecedenteEsperado = 1;
            _antecedente = _daoHistoriaClinica.ConsultarAntecedente(_fkIdHistoria);

            Assert.IsNotNull(_antecedente);
            Assert.IsTrue(_antecedente.Count > 0);
            CollectionAssert.AreEqual(_antecedente, _daoHistoriaClinica.ConsultarAntecedente(_fkIdHistoria));
            Assert.AreEqual(_idAntecedenteEsperado, (_antecedente[0] as Antecedente).IdAntecedente);


            foreach (Entidad d in _antecedente)
            {
                Console.WriteLine((d as Antecedente).Respuesta);

            }
        }

        [Test]
        public void PruebaConsultarSecuencia()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            List<Entidad> _secuencia = new List<Entidad>();
            int _fkIdHistoria = 1;
            int _idSecuencia=1;

            _secuencia = _daoHistoriaClinica.ConsultarSecuencia(_fkIdHistoria);

            Assert.IsNotNull(_secuencia);
            Assert.IsTrue(_secuencia.Count > 0);
            CollectionAssert.AreEqual(_secuencia, _daoHistoriaClinica.ConsultarSecuencia(_fkIdHistoria));
            Assert.AreEqual(_idSecuencia, (_secuencia[0] as DetalleSecuencia).IdSecuencia);

            foreach (Entidad d in _secuencia)
            {
                Console.WriteLine((d as DetalleSecuencia).Observacion);
            }
        }

        [Test]
        public void PruebaConsultarSecuenciaXid()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            Entidad _secuencia = new DetalleSecuencia();
            int _idSecuencia = 1;
            int _idEsperado = 1;

            _secuencia = _daoHistoriaClinica.ConsultarSecuenciaXid(_idSecuencia);

            Assert.IsNotNull(_secuencia);
            Assert.AreEqual(_idEsperado, (_secuencia as DetalleSecuencia).IdSecuencia);


            Console.WriteLine((_secuencia as DetalleSecuencia).Fecha);
            Console.WriteLine((_secuencia as DetalleSecuencia).Pieza);
            Console.WriteLine((_secuencia as DetalleSecuencia).Diagnostico);
            Console.WriteLine((_secuencia as DetalleSecuencia).Estado);
            Console.WriteLine((_secuencia as DetalleSecuencia).Observacion);

        }

        [Test]
        public void PruebaBuscarUltimaId()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            int _ultimo = _daoHistoriaClinica.BuscarUltimaId();

            Assert.IsNotNull(_ultimo);
            Assert.IsTrue(_ultimo > 0);
            Console.WriteLine(_ultimo);

        }

        /*Insercion*/
        [Test]
        public void PruebaAgregarHistoriaClinica()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            Entidad _historiaClinica = FabricaEntidad.NuevaHistoria();
            Entidad _paciente = FabricaEntidad.NuevoCliente();
            (_paciente as Cliente).IdUsuario = 16;
            (_historiaClinica as HistoriaClinica).FechaIngreso = Convert.ToDateTime("10/08/2013");
            (_historiaClinica as HistoriaClinica).Paciente = (_paciente as Cliente);
            (_historiaClinica as HistoriaClinica).Observacion="prueba agregar historia clinica";
            (_historiaClinica as HistoriaClinica).Estado="inactivo";
            
            Assert.IsTrue(_daoHistoriaClinica.AgregarHistoriaClinica(_historiaClinica));


        }


        [Test]
        public void PruebaAgregarAntecedente()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            List<String> _respuestas = new List<String>();

            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("no");
            _respuestas.Add("ninguno");
            _respuestas.Add("ninguno");
            _respuestas.Add("ninguno");

            Assert.IsTrue(_daoHistoriaClinica.AgregarAntecedente(_respuestas, 0));
        }

        [Test]
        public void PruebAgregarSecuencia()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            List<Entidad> _secuencias = new List<Entidad>();
            Entidad _secuencia = FabricaEntidad.NuevoDetalleSecuencia();
            Entidad _medico = FabricaEntidad.NuevaUsuario();
            Entidad _tratamiento = FabricaEntidad.NuevoTratamiento();

            (_medico as Usuario).IdUsuario = 3;
            (_tratamiento as Tratamiento).Id = 1;

            (_secuencia as DetalleSecuencia).IdSecuencia = 1;
            (_secuencia as DetalleSecuencia).Observacion = "Prueba exitosa";
            (_secuencia as DetalleSecuencia).Tratamiento = (_tratamiento as Tratamiento);
            (_secuencia as DetalleSecuencia).IdHistoriaBase = 1;
            (_secuencia as DetalleSecuencia).Odontologo = (_medico as Usuario);
            (_secuencia as DetalleSecuencia).Fecha = Convert.ToDateTime("10/08/2013");
            (_secuencia as DetalleSecuencia).Pieza = "19";
            (_secuencia as DetalleSecuencia).Diagnostico = "Caries";
            (_secuencia as DetalleSecuencia).Estado = "inactivo";
            _secuencias.Add(_secuencia);

            Assert.IsTrue(_daoHistoriaClinica.AgregarSecuencia(_secuencias, 1));
        }

        [Test]
        public void PruebaModificarHistoriaClinica()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            Entidad _historia = FabricaEntidad.NuevaHistoria();

            (_historia as HistoriaClinica).NumeroHistoria = 1;
            (_historia as HistoriaClinica).FechaIngreso = DateTime.ParseExact("15/10/2012", @"dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
            (_historia as HistoriaClinica).Estado = "activo";
            (_historia as HistoriaClinica).Observacion = "sEGUNDA PRUEBA";

            Assert.IsTrue(_daoHistoriaClinica.ModificarHistoriaClinica(_historia));
        }


        [Test]
        public void PruebaModificarAntecedente()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            List<Entidad> _antecedente = new List<Entidad>();
            Entidad _resp1 = FabricaEntidad.NuevoAntecedente();
            Entidad _resp2 = FabricaEntidad.NuevoAntecedente();
            Entidad _resp3 = FabricaEntidad.NuevoAntecedente();

            (_resp1 as Antecedente).IdAntecedente = 1;
            (_resp1 as Antecedente).Respuesta = "otra";
            (_resp2 as Antecedente).IdAntecedente = 2;
            (_resp2 as Antecedente).Respuesta = "prueab";
            (_resp3 as Antecedente).IdAntecedente = 3;
            (_resp3 as Antecedente).Respuesta = "Volver";

            _antecedente.Add(_resp1);
            _antecedente.Add(_resp2);
            _antecedente.Add(_resp3);

            Assert.IsTrue(_daoHistoriaClinica.ModificarAntecedente(_antecedente));
        }

        [Test]
        public void PruebaModificarSecuencia()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            List<Entidad> _secuencias = new List<Entidad>();
            Entidad _secuencia = FabricaEntidad.NuevoDetalleSecuencia();
            Entidad _medico = FabricaEntidad.NuevaUsuario();
            Entidad _tratamiento = FabricaEntidad.NuevoTratamiento();

            (_medico as Usuario).IdUsuario = 3;
            (_tratamiento as Tratamiento).Id = 1; 
            (_secuencia as DetalleSecuencia).IdSecuencia = 1;
            (_secuencia as DetalleSecuencia).Observacion ="Prueba exitosa";
            (_secuencia as DetalleSecuencia).Tratamiento = (_tratamiento as Tratamiento);
            (_secuencia as DetalleSecuencia).IdHistoriaBase = 1;
            (_secuencia as DetalleSecuencia).Odontologo= (_medico as Usuario);
            (_secuencia as DetalleSecuencia).Fecha = Convert.ToDateTime("10/08/2013");
            (_secuencia as DetalleSecuencia).Pieza = "19";
            (_secuencia as DetalleSecuencia).Diagnostico = "Caries";
            (_secuencia as DetalleSecuencia).Estado = "inactivo";
            _secuencias.Add(_secuencia);

            Assert.IsTrue(_daoHistoriaClinica.ModificarSecuencia(_secuencias));
        }

      
        [Test]
        public void PruebActivarIactivarHistoriaClinica()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            String estado ="InACTiVO";
            Assert.IsTrue(_daoHistoriaClinica.ActivarDesactivarHistoriaClinica(1, estado));
        }

        [Test]
        public void PruebActivarDesactivarSecuencia()
        {
            iDAOHistoriaClinica _daoHistoriaClinica = FabricaDAO.CrearFabricaDeDAO(1).CrearDAOHistoriaClinica();
            String estado = "InACTiVO";
            Assert.IsTrue(_daoHistoriaClinica.ActivarDesactivarHistoriaClinica(1, estado));
        }

        
    }
}